using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Marlimer.Common;
using Marlimer.Logical.Comercial;
using Marlimer.Common.EntidadesGrilla;
using Marlimer.Logical.Universal;  

namespace Marlimer.Comercial.Procesos
{
    public partial class frm_ObjVentasRuta : Form
    {
        lcom_Ruta lcom_ruta = new lcom_Ruta(); 
        lcom_Zona lcom_zona = new lcom_Zona();
        lcom_GrupoVenta lcom_grupoventa = new lcom_GrupoVenta(); 
        List<itemsGrilla> itemsGrid = new List<itemsGrilla>();

        public frm_ObjVentasRuta()
        {
            InitializeComponent();
        }

        private void frm_ObjVentasRuta_Load(object sender, EventArgs e)
        {
            //cargar estructura de grilla;
            itemsGrid.Add(new itemsGrilla("ccod_itm", "", 60, false, true, DataGridViewContentAlignment.MiddleRight));
            itemsGrid.Add(new itemsGrilla("nanio", "", 60, false, true, DataGridViewContentAlignment.MiddleRight));
            itemsGrid.Add(new itemsGrilla("nmes", "", 60, false, true, DataGridViewContentAlignment.MiddleRight));
            itemsGrid.Add(new itemsGrilla("ccod_grpvta", "", 60, false, true, DataGridViewContentAlignment.MiddleRight));
            itemsGrid.Add(new itemsGrilla("cnom_grpvta", "Grupo Venta", 100, true, true, DataGridViewContentAlignment.MiddleLeft));
            itemsGrid.Add(new itemsGrilla("ccod_zona", "", 60, false, true, DataGridViewContentAlignment.MiddleRight));
            itemsGrid.Add(new itemsGrilla("cnom_zona", "Zona", 90, true, true, DataGridViewContentAlignment.MiddleLeft));
            itemsGrid.Add(new itemsGrilla("ccod_ruta", "", 60, false, true, DataGridViewContentAlignment.MiddleRight));
            itemsGrid.Add(new itemsGrilla("cnom_ruta", "Ruta", 70, true, true, DataGridViewContentAlignment.MiddleLeft));
            itemsGrid.Add(new itemsGrilla("vendedor", "Vendedor", 150, true, true, DataGridViewContentAlignment.MiddleLeft));
            itemsGrid.Add(new itemsGrilla("nobj_soles", "Obj. Soles", 90, true, false, DataGridViewContentAlignment.MiddleRight, "F"));
            itemsGrid.Add(new itemsGrilla("flg_editable", "", 0, false, true, DataGridViewContentAlignment.MiddleLeft));

            cargarCombos();
            ConfigurarRejilla();

            
            this.Location = new Point(0, 0);
            
        }

        private void ConfigurarRejilla()
        {
            gridResultados.Columns.Clear();
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Grupo Venta", 100, true, true, DataGridViewContentAlignment.MiddleLeft));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Zona", 90, true, true, DataGridViewContentAlignment.MiddleLeft));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Ruta", 150, true, true, DataGridViewContentAlignment.MiddleLeft));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Vendedor", 80, true, true, DataGridViewContentAlignment.MiddleLeft));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Obj. Soles", 120, true, true, DataGridViewContentAlignment.MiddleLeft));

            //gridResultados.AllowUserToResizeColumns = false;
            gridResultados.AllowUserToResizeRows = false;
            gridResultados.RowHeadersVisible = false;
            gridResultados.AllowUserToAddRows = false;
            //gridResultados.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
        }


        private void cargarCombos()
        {
            Util.LlenarDataCombo(lcom_zona.getDTZona(), cboZona, true);
            Util.LlenarDataCombo(lcom_grupoventa.getDTGrupoVenta(), cboGrupoVenta, true);  
            Util.LlenarDataCombo(Util.getDTAnio(), cboAnio, true);
            Util.LlenarDataCombo(Util.getDTMes(), cboMes, true);
            cboAnio.SelectedValue = DateTime.Today.Year;
            cboMes.SelectedValue = DateTime.Today.Month;
        }


        private void cboGeneral_KeyPress(object sender, KeyPressEventArgs e)
        {
            Util.validaEnter(e.KeyChar);
        }

        private void txtGeneral_Leave(object sender, EventArgs e)
        {
            TextBox txt = (TextBox)sender;
            String value = "";
            int valuenum = -1;
            String nametxt = txt.Name;
            object newval = null;

            if (txt.Text.Trim() != "")
            {
                value = txt.Text;
                valuenum = Convert.ToInt32(Util.ToValor(txt.Text));
            }

            switch (nametxt)
            {
                case "txtCodGrupoVenta":
                    {
                        cboGrupoVenta.SelectedValue = valuenum;
                        newval = cboGrupoVenta.SelectedValue;  
                        break; 
                    }
                case "txtCodZona":
                    {
                        cboZona.SelectedValue = valuenum;
                        newval = cboZona.SelectedValue;
                        break;
                    }
            }
            txt.Text = Convert.ToString(newval);
        }

        private void cboGeneralDT_SelectedIndexChanged(object sender, EventArgs e)
        {
            ComboBox cbo = (ComboBox)sender;
            String valor = "";
            String namecbo = cbo.Name;
            //validamos que el indice seleccionado sea mayor a -1
            if (cbo.SelectedIndex > -1 && cbo.SelectedValue.ToString() != "System.Data.DataRowView")
            {
                valor = Convert.ToString(cbo.SelectedValue);
            }

            switch (namecbo)
            {
                case "cboZona":
                    {
                        txtCodZona.Text = valor;
                        break;
                    }
                case "cboGrupoVenta":
                    {
                        txtCodGrupoVenta.Text = valor;
                        break;
                    }
            }

        }

        private void txtGeneralSelect_Enter(object sender, EventArgs e)
        {
            Util.selectAllText(((TextBox)sender));
        }

        private void txtGeneralEntero_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = Util.validaTecla(e.KeyChar, "Entero", ((TextBox)sender).Text, true);
        }

        private void nuevaBusqueda()
        {
            cargarCombos();
            gridResultados.DataSource = null;  
            ConfigurarRejilla();
            tblBuscar.Enabled = true;
            tblGuardar.Enabled = false;
            mnuBuscar.Enabled = true;
            mnuGuardar.Enabled = false; 
            panFiltros.Enabled = true;  
        }

        private void tstComandos_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            int indice = -1;
            if (e.ClickedItem.GetType().Name == "ToolStripButton")
            {
                indice = tstComandos.Items.IndexOf((ToolStripItem)e.ClickedItem);
            }
            else
            {
                indice = mnuComandos.DropDownItems.IndexOf((ToolStripItem)e.ClickedItem);
            }

            switch (indice)
            {
                case 0:     //nuevo
                    {
                        nuevaBusqueda();
                        break;
                    }
                case 1:
                    {
                        buscar();
                        break;
                    }
                case 2:
                    {
                        guardar();
                        break;
                    }
            }
        }

        private void buscar()
        {
            DataTable dtresul = lcom_ruta.mostrarObjetivosRuta(Convert.ToInt32(cboAnio.SelectedValue),
                    Convert.ToInt32(cboMes.SelectedValue), Convert.ToInt32(cboGrupoVenta.SelectedValue), Convert.ToInt32(cboZona.SelectedValue));

            gridResultados.DataSource = null;
            ConfigurarRejilla();
            //llenar grilla.
            //considerar que los pedidos que estan anulados 
            //estado D deben estar en color rojo y con cursiva.
            if (dtresul.Rows.Count > 0)
            {
                gridResultados.Columns.Clear();
                gridResultados.DataSource = dtresul;
                Util.setRejillaColumns(gridResultados, itemsGrid);
                calcularTotales(dtresul);
                lblResultados.Text = "Registros encontrados: " + dtresul.Rows.Count.ToString();
                tblGuardar.Enabled = true;
                tblBuscar.Enabled = false;
                mnuGuardar.Enabled = true;
                mnuBuscar.Enabled = true; 
                panFiltros.Enabled = false; 
            }
            else
            {
                //no se encontraron resultados.
                lblResultados.Text = "No se encontraron resultados.";
                tblGuardar.Enabled = false;
                tblBuscar.Enabled = true;
                mnuBuscar.Enabled = true;
                mnuGuardar.Enabled = false; 
                panFiltros.Enabled = true; 
            }
        }

        private void calcularTotales(DataTable dtresul)
        {
            txtTotal.Text = Convert.ToString(Util.agregado(1, dtresul, "nobj_soles"));
        }

        private void guardar()
        {
            List<InfoObjetivoRuta> objsrut = new List<InfoObjetivoRuta>();
            Boolean ingreso = false;
            for (int i = 0; i < gridResultados.Rows.Count; i++)
            {
                if (Convert.ToInt32(gridResultados.Rows[i].Cells["flg_editable"].Value) == 1)
                {
                    InfoObjetivoRuta objrut = new InfoObjetivoRuta();
                    objrut.ccod_itm = Convert.ToInt32(gridResultados.Rows[i].Cells["ccod_itm"].Value);
                    objrut.nobj_soles = Convert.ToDouble(gridResultados.Rows[i].Cells["nobj_soles"].Value);
                    objrut.nobj_cant = 0;//Convert.ToInt32(gridResultados.Rows[i].Cells["nobj_cant"].Value);
                    objsrut.Add(objrut);
                    ingreso = true;
                }
            }

            if (ingreso)
            {
                if (MessageBox.Show("Seguro que desea guardar los cambios?", this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                {
                    resulMsgError resul = lcom_ruta.guardarObjetivosRuta(objsrut);

                    if (resul.resul)
                    {
                        MessageBox.Show(resul.message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        buscar(); 
                    }
                    else
                    {
                        MessageBox.Show(resul.message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }

        }

        private void gridResultados_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            double valordef = Convert.ToDouble(gridResultados.Rows[e.RowIndex].Cells["nobj_soles"].Value);

            if (aceptarNumero(e.RowIndex, e.ColumnIndex))
            {
                gridResultados.Rows[e.RowIndex].Cells["flg_editable"].Value = 1;
            }
            else
            {
                gridResultados.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = valordef;
            }
        }

        private Boolean aceptarNumero(int indexrow, int indexcol)
        {
            Boolean resul = false;
            Boolean salir = false;
            //el valor ingresado debe ser numerico
            if (Util.IsNumeric(gridResultados.Rows[indexrow].Cells[indexcol].Value.ToString()))
            {

                double val = Util.ToValor(gridResultados.Rows[indexrow].Cells[indexcol].Value.ToString());
                if (val > 0)
                {
                    resul = true;
                }
                else
                {
                    MessageBox.Show("Debe ingresar un valor numerico mayor que 0 (cero)", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    salir = true;
                }
            }
            else
            {
                MessageBox.Show("Debe ingresar un valor numerico.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                salir = true;
            }
            if (salir)
            {
                resul = false;
            }
            return resul;
        }

        private void gridResultados_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (Convert.ToInt32(gridResultados.Rows[e.RowIndex].Cells["flg_editable"].Value) == 1)
            {
                gridResultados.Rows[e.RowIndex].DefaultCellStyle.ForeColor = System.Drawing.Color.Chocolate;
            }
        }

        private void btnAuditoria_Click(object sender, EventArgs e)
        {
            if (gridResultados.CurrentRow != null)
            {
                int ccod_itm = Convert.ToInt32(Util.ToValor(gridResultados.CurrentRow.Cells[0].Value.ToString()));
                //devuelve 
                DataTable dtAudi = new DataTable();
                luni_Auditoria luni_auditoria = new luni_Auditoria();
                dtAudi = luni_auditoria.getAuditoria(ccod_itm, 7);      //tabla de objetivos de ruta
                if (dtAudi.Rows.Count > 0)
                {
                    String msj = Util.doMsjAuditoria(dtAudi);
                    MessageBox.Show(msj, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }
    }
}